package com.wgy.day18.多态.向上转型和向下转型;
/*
* 如何知道一个父类引用对象,本来是什么子类?
* 检验格式:
* 对象名称 instanceof 类名称
* 这将会得到一个boolean值结果,也是判断前面的对象能不能当做后面的类型的实例
* 用关键字 instanceof 进行 向下还原 判断: true就是可以向下还原  false就是不可以进行向下还原
* 注意:向下转型一定要进行 instanceof 判断, 否则有可能发生类转换异常 (class cast exception )

 * */

public class Demo02Instanceof {
    public static void main(String[] args) {
        Animal animal=new Cat();//创建的是一只猫
        animal.eat();//猫吃鱼

     //如果希望用子类特有的方法,需要向下转型
     //先判断一下父类引用animal本来是不是dog
     if(animal instanceof Dog){
         Dog dog=(Dog)animal;
         dog.watchHouse();
     }   else if(animal instanceof Cat){
         Cat cat=(Cat)animal;
         cat.catchMouse();
     }
        giveMeAPet(new Dog());


    }

public static void giveMeAPet(Animal animal){
        if(animal instanceof Dog){
            Dog dog=(Dog)animal;
            dog.watchHouse();
        }else if(animal instanceof Cat){
            Cat cat =(Cat)animal;
            cat.catchMouse();
        }
}











}
